<?php
/* $Vincode='01234567891234567';             #(车架号)17B
$FID=strtohex(3);                 //(功能ID)1B

#当前时间与2000-01-01 00:00:00时间差，单位为秒
$btime=time()-strtotime("2000-01-01 00:00:00");

#fputs ( fopen ( 'x.log', 'a+' ),  hex2bin(timeLen($btime).'0x55') );


$TIME=strtohex($btime).'0x55';                //(当前时间与2000-01-01 00:00:00时间差，单位为秒，长度4字节，后3字节补0x55。) 7B


#数据包
$MID='5'; #1B 即Message ID
$yData='HelloWorld!';
$LEN=strlen($yData); #1B Data长度，若Data需加密，LEN为加密前Data长度。
$Data=strtohex($yData); /*NB  需加密 消息内容，MID为0x10和0x11的Data需加密；若Data需加密，
先将Data长度扩展为8的整数倍（使用0x55填充），后对Data加密，最后对加密后Data转义。*/
$Checksum=strlen($Data); #2B
#数据包

$MessagePack =$MID.$LEN.$Data.$Checksum;        #NB 消息包，消息包格式：MID(1B) + LEN(1B) + Data + Checksum(2B)


$SEP='9';                 #SEP(1B)

#Vin code(17B) + FID(1B) + TIME(7B) + MessagePack + …… + MessagePack + SEP(1B)
echo $Vincode.$FID.$TIME.$MessagePack.$SEP;

#file_put_contents('x.log', hex2bin(timeLen($btime)));
#fputs ( fopen ( 'x.log', 'a+' ),  hex2bin(timeLen($btime)) ); */
#加密方法
function strtohex($src) {
	$str = '';
	$strlen = strlen($src);

	for($i = 0; $i < $strlen; $i++) {
		#ord得到字符串单个字符的ASCII值，dechex转为16进制
		$str .="0x".str_pad(dechex(ord(substr($src, $i, 1))), 2, '0', STR_PAD_LEFT);
		#$str .=str_pad(dechex(ord(substr($src, $i, 1))), 2, '0', STR_PAD_LEFT);
	}
	return $str;
}

#解密方法
function hextostr($src) {
	$str = '';
	$strlen = strlen($src);

	for($i = 0; $i < $strlen;$i += 4) {
		#hexdec将密文以4为单位，转为10进制，取出ASCII，hexdec将ASCII转为字符
		$str .= chr(hexdec(substr($src,$i,4)));
	}
	return $str;
}
function hex2bin($data)
{
	$bin    = "";
	$i      = 0;
	do {
		$bin    .= chr(hexdec($data{$i}.$data{($i + 1)}));
		$i      += 2;
	} while ($i < strlen($data));

	return $bin;
}

#16进制

function timeLen( $t = 0 )
{
	return str_pad( dechex($t), 8, 0, STR_PAD_LEFT );
}

